<?php

if (!defined('ADODB_DIR'))
    die();

class ADODB2_db2 extends ADODB_DataDict {

    var $databaseType = 'db2';
    var $seqField = false;

    function ActualType($meta) {
        switch ($meta) {
            case 'C': return 'VARCHAR';
            case 'XL': return 'CLOB';
            case 'X': return 'VARCHAR(3600)';

            case 'C2': return 'VARCHAR';
            case 'X2': return 'VARCHAR(3600)';

            case 'B': return 'BLOB';

            case 'D': return 'DATE';
            case 'TS':
            case 'T': return 'TIMESTAMP';

            case 'L': return 'SMALLINT';
            case 'I': return 'INTEGER';
            case 'I1': return 'SMALLINT';
            case 'I2': return 'SMALLINT';
            case 'I4': return 'INTEGER';
            case 'I8': return 'BIGINT';

            case 'F': return 'DOUBLE';
            case 'N': return 'DECIMAL';
            default:
                return $meta;
        }
    }

    function _CreateSuffix($fname, &$ftype, $fnotnull, $fdefault, $fautoinc, $fconstraint, $funsigned) {
        $suffix = '';
        if ($fautoinc)
            return ' GENERATED ALWAYS AS IDENTITY';
        if (strlen($fdefault))
            $suffix .= " DEFAULT $fdefault";
        if ($fnotnull)
            $suffix .= ' NOT NULL';
        if ($fconstraint)
            $suffix .= ' ' . $fconstraint;
        return $suffix;
    }

    function AlterColumnSQL($tabname, $flds) {
        if ($this->debug)
            ADOConnection::outp("AlterColumnSQL not supported");
        return array();
    }

    function DropColumnSQL($tabname, $flds) {
        if ($this->debug)
            ADOConnection::outp("DropColumnSQL not supported");
        return array();
    }

    function ChangeTableSQL($tablename, $flds, $tableoptions = false) {
        $validTypes = array("CHAR", "VARC");
        $invalidTypes = array("BIGI", "BLOB", "CLOB", "DATE", "DECI", "DOUB", "INTE", "REAL", "SMAL", "TIME");
        $cols = $this->MetaColumns($tablename);
        if (empty($cols)) {
            return $this->CreateTableSQL($tablename, $flds, $tableoptions);
        }
        list($lines, $pkey) = $this->_GenFields($flds);
        $alter = 'ALTER TABLE ' . $this->TableName($tablename);
        $sql = array();

        foreach ($lines as $id => $v) {
            if (isset($cols[$id]) && is_object($cols[$id])) {
                $vargs = explode(' ', $v);
                $i = 0;
                for ($i = 1; $i < sizeof($vargs); $i++)
                    if ($vargs[$i] != '')
                        break;
                if (in_array(substr($vargs[$i], 0, 4), $invalidTypes))
                    continue;
                if (in_array(substr($vargs[$i], 0, 4), $validTypes)) {
                    array_splice($vargs, $i, 0, array('SET', 'DATA', 'TYPE'));
                }
                if (in_array('NOT', $vargs) && in_array('NULL', $vargs)) {
                    for ($i = 1; $i < sizeof($vargs); $i++)
                        if ($vargs[$i] == 'NOT')
                            break;
                    array_splice($vargs, $i, 2, '');
                }
                $v = implode(' ', $vargs);
                $sql[] = $alter . $this->alterCol . ' ' . $v;
            } else {
                $sql[] = $alter . $this->addCol . ' ' . $v;
            }
        }

        return $sql;
    }

}

?>